Groovy তে ফাংশন (Functions) এবং ক্লোজার (Closures) উভয়ই গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি কোড পুনঃব্যবহারযোগ্য এবং আরও সংক্ষিপ্ত, পরিষ্কার ও কার্যকরী করে তোলে। Groovy তে ফাংশন এবং ক্লোজার ব্যবহারের সুবিধা হল এর ডাইনামিক টাইপিং এবং ফাংশনাল প্রোগ্রামিংয়ের শক্তিশালী সমর্থন।
Groovy তে ফাংশন (বা মেথড) ডিফাইন করা অত্যন্ত সহজ। def
কীওয়ার্ড ব্যবহার করে ফাংশন ডিফাইন করা হয়, এবং এটি সাধারণভাবে আর্গুমেন্ট নেয় এবং কোন মান রিটার্ন করে।
ফাংশন ডিফাইন করতে def
কীওয়ার্ড এবং একটি নাম ব্যবহার করা হয়, তারপরে আর্গুমেন্ট এবং রিটার্ন স্টেটমেন্ট নির্ধারণ করা হয়।
def greet(name) {
return "Hello, $name!"
}
println greet("Groovy") // Output: Hello, Groovy!
এখানে, greet
একটি ফাংশন যা একটি আর্গুমেন্ট name
নেয় এবং সেটি ব্যবহার করে একটি স্ট্রিং রিটার্ন করে।
Groovy তে, আপনি ফাংশনের রিটার্ন টাইপ উল্লেখ না করলেও এটি ডাইনামিকভাবে রিটার্ন টাইপ নির্ধারণ করে। তবে, আপনি চাইলে রিটার্ন টাইপও নির্ধারণ করতে পারেন।
String greet(String name) {
return "Hello, $name!"
}
এখানে, ফাংশনের রিটার্ন টাইপ হিসেবে String
উল্লেখ করা হয়েছে।
Groovy তে আপনি ফাংশনের আর্গুমেন্টের জন্য ডিফল্ট মান সেট করতে পারেন। যদি আর্গুমেন্টে কোন মান না দেয়া হয়, তবে ডিফল্ট মান ব্যবহার করা হবে।
def greet(name = "Guest") {
return "Hello, $name!"
}
println greet() // Output: Hello, Guest!
println greet("Groovy") // Output: Hello, Groovy!
এখানে, name
এর জন্য ডিফল্ট মান "Guest"
নির্ধারণ করা হয়েছে।
Groovy তে, আপনি একটি ফাংশনকে অন্য একটি ফাংশনে আর্গুমেন্ট হিসেবে পাঠাতে পারেন।
def square(x) {
return x * x
}
def processNumber(func, num) {
return func(num)
}
println processNumber(square, 4) // Output: 16
এখানে, square
ফাংশনকে processNumber
ফাংশনে আর্গুমেন্ট হিসেবে পাঠানো হয়েছে।
Groovy তে ক্লোজার হলো একটি কোড ব্লক বা অ্যানোনিমাস ফাংশন যা একটি ফাংশনের ভিতরে বা বাইরে ডিফাইন করা যেতে পারে এবং এটি বাইরের স্কোপ থেকে ভেরিয়েবল বা স্টেট এক্সেস করতে সক্ষম। এটি ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ।
ক্লোজার একটি কোড ব্লক যা {}
দিয়ে ডিফাইন করা হয় এবং আর্গুমেন্ট গ্রহণ করতে পারে। এটি ফাংশনের মতোই কাজ করে, তবে একে একটি ভেরিয়েবল হিসেবে ধারণ করা যায় এবং প্রয়োজনে পুনঃব্যবহার করা যায়।
def multiply = { x, y -> x * y }
println multiply(3, 4) // Output: 12
এখানে, multiply
একটি ক্লোজার যা দুটি আর্গুমেন্ট গ্রহণ করে এবং তাদের গুণফল রিটার্ন করে।
Groovy তে ক্লোজার ফাংশনাল প্রোগ্রামিংয়ের জন্য খুবই শক্তিশালী একটি বৈশিষ্ট্য। আপনি লিস্ট বা অ্যারের উপরে collect
, find
, each
ইত্যাদি মেথড ব্যবহার করতে পারেন ক্লোজারের মাধ্যমে।
def numbers = [1, 2, 3, 4, 5]
def doubled = numbers.collect { it * 2 }
println doubled // Output: [2, 4, 6, 8, 10]
এখানে, collect
মেথডের মাধ্যমে প্রতিটি উপাদানকে দ্বিগুণ করা হয়েছে।
ক্লোজার বাইরের স্কোপ থেকে ভেরিয়েবল বা স্টেট এক্সেস করতে পারে। এটি "closure binding" নামে পরিচিত।
def factor = 2
def multiply = { x -> x * factor }
println multiply(5) // Output: 10
এখানে, multiply
ক্লোজারটি বাইরের factor
ভেরিয়েবলটি এক্সেস করে এবং সেটি ব্যবহৃত হয়।
ক্লোজারের ভিতরে আপনি নেমড আর্গুমেন্টসও ব্যবহার করতে পারেন, যা খুবই কার্যকরী।
def greet = { name, message -> println "$message, $name!" }
greet(name: "Groovy", message: "Welcome") // Output: Welcome, Groovy!
এখানে, name
এবং message
আর্গুমেন্টস ক্লোজারে নেমড আর্গুমেন্টস হিসেবে পাঠানো হয়েছে।
ক্লোজার লোকাল ভেরিয়েবল এবং গ্লোবাল ভেরিয়েবল এক্সেস করতে পারে, তবে গ্লোবাল ভেরিয়েবল পরিবর্তন করার জন্য delegate
বা binding
ব্যবহৃত হতে পারে।
def x = 10
def closure = {
x = 20 // changing global variable 'x'
}
closure()
println x // Output: 20
এখানে, ক্লোজারটি গ্লোবাল x
ভেরিয়েবল পরিবর্তন করেছে।
বৈশিষ্ট্য | ফাংশন | ক্লোজার |
---|---|---|
কোড ব্লক | একটি নির্দিষ্ট ফাংশন যা আর্গুমেন্ট নেয় | একটি অ্যানোনিমাস কোড ব্লক, ফাংশনের মতো কাজ করে |
ভেরিয়েবল এক্সেস | শুধুমাত্র নিজস্ব স্কোপে অ্যাক্সেস | বাইরের স্কোপ থেকেও ভেরিয়েবল অ্যাক্সেস করতে পারে |
প্রতিষ্ঠান | সাধারণত ফাংশন রিটার্নের জন্য ব্যবহৃত | ফাংশনাল প্রোগ্রামিং, পুনঃব্যবহারযোগ্য কোডের জন্য ব্যবহৃত |
ব্যবহার | নির্দিষ্ট কাজ করতে ব্যবহৃত | কোড ব্লক হিসেবে বা আর্গুমেন্ট হিসেবে ব্যবহৃত |
Groovy তে ফাংশন এবং ক্লোজার উভয়ই কোড পুনঃব্যবহারযোগ্য করতে এবং কার্যকরীভাবে কোড লেখার জন্য গুরুত্বপূর্ণ। ফাংশন সাধারণত নির্দিষ্ট কাজের জন্য ব্যবহৃত হয়, তবে ক্লোজার একটি কোড ব্লক হিসেবে কাজ করে যা বাইরের স্কোপ থেকে ভেরিয়েবল অ্যাক্সেস করতে পারে। Groovy তে ক্লোজার ব্যবহারের মাধ্যমে আপনি কার্যকরীভাবে ফাংশনাল প্রোগ্রামিং কৌশল প্রয়োগ করতে পারেন।
Groovy তে ফাংশন (বা মেথড) ডিক্লারেশন এবং কল করা Java এর মতোই সহজ। তবে, Groovy এর মেথড ডিক্লারেশন কিছুটা সংক্ষিপ্ত এবং নমনীয়, যা কোড লেখাকে আরও দ্রুত এবং সহজ করে তোলে। Groovy তে মেথডকে সাধারণত def
কীওয়ার্ড ব্যবহার করে ডিক্লার করা হয় এবং টাইপ ডিক্লারেশন বাধ্যতামূলক নয়।
Groovy তে একটি ফাংশন ডিক্লার করতে def
কীওয়ার্ড ব্যবহার করা হয়। আপনি চাইলে ফাংশন রিটার্ন টাইপ উল্লেখ করতে পারেন, তবে এটি বাধ্যতামূলক নয়।
def greet() {
println "Hello, Groovy!"
}
// ফাংশন কল
greet() // Output: Hello, Groovy!
পার্থক্য: Java তে void
টাইপ ডিক্লার করতে হয়, কিন্তু Groovy তে def
ব্যবহার করা হয়, এবং এটি টাইপ নির্বিশেষে কাজ করতে পারে।
Groovy তে প্যারামিটারসহ ফাংশন ডিক্লার করা যায়। এই ফাংশন একটি বা একাধিক প্যারামিটার গ্রহণ করতে পারে।
def greet(name) {
println "Hello, $name!"
}
// ফাংশন কল
greet("Alice") // Output: Hello, Alice!
পার্থক্য: Groovy তে def
ব্যবহার করার কারণে প্যারামিটার টাইপ নির্ধারণ করা বাধ্যতামূলক নয়। এটি ডাইনামিক ভাবে কাজ করে।
Groovy তে ফাংশন প্যারামিটারগুলির জন্য ডিফল্ট মান নির্ধারণ করা যায়। যদি কল করার সময় কোনো মান প্রদান না করা হয়, তবে ডিফল্ট মান ব্যবহার হবে।
def greet(name = "Guest") {
println "Hello, $name!"
}
// ফাংশন কল
greet("Alice") // Output: Hello, Alice!
greet() // Output: Hello, Guest!
উল্লেখযোগ্য দিক: Java তে ডিফল্ট প্যারামিটার ব্যবহার করা যায় না, তবে Groovy তে ডিফল্ট মান সেট করা সম্ভব।
Groovy তে কোনো ফাংশন একটি রিটার্ন মান প্রদান করতে পারে। Groovy তে return
কীওয়ার্ড উল্লেখ না করলেও, ফাংশনের শেষ এক্সপ্রেশন স্বয়ংক্রিয়ভাবে রিটার্ন হয়।
def add(a, b) {
a + b // এটি স্বয়ংক্রিয়ভাবে রিটার্ন হবে
}
// ফাংশন কল এবং রিটার্ন মান ব্যবহার
def result = add(5, 10)
println result // Output: 15
Java এর তুলনায় পার্থক্য: Java তে return
ব্যবহার করা বাধ্যতামূলক, কিন্তু Groovy তে এটি ঐচ্ছিক।
Groovy তে ফাংশনের মধ্যে আরেকটি ফাংশন ডিক্লার করা সম্ভব।
def outerFunction() {
def innerFunction() {
println "This is inner function."
}
println "This is outer function."
innerFunction()
}
// ফাংশন কল
outerFunction()
// Output:
// This is outer function.
// This is inner function.
Java এর তুলনায় পার্থক্য: Java তে ফাংশনের ভিতরে ফাংশন ডিক্লার করা যায় না, তবে Groovy তে এটি করা সম্ভব।
Groovy তে ক্লোজার (Closure) ফাংশন হিসাবে ব্যবহার করা যেতে পারে। ক্লোজার একটি বিশেষ ধরনের ফাংশন, যা একটি ভেরিয়েবলে সংরক্ষণ করা যায় এবং যেকোনো সময় কল করা যায়।
def greet = { name -> "Hello, $name!" }
println greet("Groovy") // Output: Hello, Groovy!
পার্থক্য: Java তে ক্লোজার ফাংশন হিসাবে সরাসরি ব্যবহার করা যায় না, কিন্তু Groovy তে এটি সহজেই ব্যবহৃত হয় এবং এটি ফাংশনাল প্রোগ্রামিংয়ের সুবিধা প্রদান করে।
Groovy তে একাধিক প্যারামিটার গ্রহণ করতে ...
ব্যবহার করা হয়, যা ফাংশনকে একটি আরগুমেন্ট তালিকা তৈরি করতে সক্ষম করে।
def addAll(int... numbers) {
numbers.sum()
}
println addAll(1, 2, 3, 4, 5) // Output: 15
Java এর তুলনায় পার্থক্য: Java তে ভ্যারিয়াডিক প্যারামিটার ব্যবহার করা গেলেও Groovy তে এটি আরও সহজে এবং সরলভাবে লেখা যায়।
Groovy তে ফাংশন ডিক্লারেশন এবং কল করা Java এর তুলনায় সহজ এবং নমনীয়। Groovy এর def
কীওয়ার্ড, ডিফল্ট প্যারামিটার মান, রিটার্ন টাইপের সহজতা, এবং ক্লোজার সমর্থন Groovy এর ফাংশন ডিক্লারেশনকে আরও শক্তিশালী এবং কার্যকর করে তোলে।
Groovy তে নামকরা ফাংশন (Named Functions) এবং অ্যানোনিমাস ফাংশন (Anonymous Functions বা Closures) দুটি গুরুত্বপূর্ণ ধারণা। এগুলি কোডে নির্দিষ্ট কাজ করার জন্য ব্যবহৃত হয়, তবে তারা কীভাবে ডিফাইন এবং কল করা হয়, সে ক্ষেত্রে কিছু পার্থক্য রয়েছে।
এখানে নামকরা ফাংশন এবং অ্যানোনিমাস ফাংশন এর সম্পর্কে বিস্তারিত আলোচনা করা হলো।
একটি নামকরা ফাংশন (অথবা নামকরা মেথড) হলো এমন একটি ফাংশন যার একটি নির্দিষ্ট নাম থাকে এবং সেই নাম দিয়ে কোডে ফাংশনটি কল করা যায়। Groovy তে ফাংশন ডিফাইন করতে def
কীওয়ার্ড ব্যবহার করা হয়, এবং এটি প্যারামিটার সহ ফাংশন বা মেথড তৈরি করতে সাহায্য করে।
def functionName(parameters) {
// ফাংশনের শরীর
}
// নামকরা ফাংশন ডিফাইন করা
def greet(name) {
println "Hello, $name!"
}
// নামকরা ফাংশন কল করা
greet("Alice") // আউটপুট: Hello, Alice!
greet("Bob") // আউটপুট: Hello, Bob!
এখানে:
greet
একটি নামকরা ফাংশন যা name
প্যারামিটার নেয় এবং একটি গ্রীটিং বার্তা প্রিন্ট করে।greet
ফাংশনটি Alice
এবং Bob
প্যারামিটার দিয়ে কল করা হয়েছে।নামকরা ফাংশন একটি মানও রিটার্ন করতে পারে।
// নামকরা ফাংশন সহ রিটার্ন ভ্যালু
def add(a, b) {
return a + b
}
// ফাংশন কল করা এবং রিটার্ন ভ্যালু গ্রহণ করা
def result = add(5, 3)
println result // আউটপুট: 8
এখানে add
ফাংশনটি দুটি প্যারামিটার নিয়ে তাদের যোগফল রিটার্ন করছে।
একটি অ্যানোনিমাস ফাংশন (অথবা ক্লোজার) এমন একটি ফাংশন যা কোনও নাম ছাড়া ব্যবহৃত হয়। Groovy তে ক্লোজারগুলি সাধারণত এক্সপ্রেশন হিসাবে ব্যবহৃত হয় এবং অনেক ক্ষেত্রেই অন্য ফাংশনে প্যারামিটার হিসেবে পাঠানো হয়।
def closure = { parameters ->
// ক্লোজারের শরীর
}
{}
ক্লোজারের শরীর চিহ্নিত করে।parameters
হল সেই প্যারামিটার যা ক্লোজারে পাঠানো হয়।// একটি অ্যানোনিমাস ফাংশন (ক্লোজার) ডিফাইন করা
def greet = { name ->
println "Hello, $name!"
}
// ক্লোজার কল করা
greet("Alice") // আউটপুট: Hello, Alice!
greet("Bob") // আউটপুট: Hello, Bob!
এখানে:
greet
হল একটি ক্লোজার যা name
প্যারামিটার গ্রহণ করে এবং একটি গ্রীটিং বার্তা প্রিন্ট করে।greet
ক্লোজারটি Alice
এবং Bob
প্যারামিটার দিয়ে কল করা হয়েছে।ক্লোজারও রিটার্ন ভ্যালু দিতে পারে।
// একটি অ্যানোনিমাস ফাংশন (ক্লোজার) সহ রিটার্ন ভ্যালু
def add = { a, b ->
return a + b
}
// ক্লোজার কল করা এবং রিটার্ন ভ্যালু গ্রহণ করা
def result = add(5, 3)
println result // আউটপুট: 8
এখানে, add
ক্লোজারটি দুটি প্যারামিটার নিয়ে তাদের যোগফল রিটার্ন করছে।
ক্লোজারগুলি একে অপরের মধ্যে প্যারামিটার হিসেবে পাঠানো যেতে পারে। Groovy তে এটি খুবই সুবিধাজনক, বিশেষ করে যখন আপনি কালেকশন বা লিস্ট নিয়ে কাজ করছেন।
// একটি মেথড যা ক্লোজার প্যারামিটার হিসেবে গ্রহণ করে
def executeOperation(a, b, operation) {
return operation(a, b) // ক্লোজারটি এখানে কল হচ্ছে
}
// একটি অ্যানোনিমাস ফাংশন (ক্লোজার) ডিফাইন করা
def multiply = { a, b ->
return a * b
}
// মেথড কল করা এবং ক্লোজার পাঠানো
def result = executeOperation(5, 3, multiply)
println result // আউটপুট: 15
এখানে, multiply
ক্লোজারটি executeOperation
মেথডে প্যারামিটার হিসেবে পাঠানো হয়েছে এবং সেখানে তা ব্যবহার করা হয়েছে।
বৈশিষ্ট্য | নামকরা ফাংশন | অ্যানোনিমাস ফাংশন (ক্লোজার) |
---|---|---|
ডিফাইনেশন | একটি নির্দিষ্ট নাম থাকে | কোনো নাম থাকে না, কোডের মধ্যে ইনলাইন ব্যবহৃত হয় |
ব্যবহার | নির্দিষ্ট নাম দিয়ে ফাংশন কল করা হয় | ভেরিয়েবল বা প্যারামিটার হিসেবে ব্যবহৃত হয় |
ফ্লেক্সিবিলিটি | কম ফ্লেক্সিবল | উচ্চ ফ্লেক্সিবল, বাইরের ভেরিয়েবল অ্যাক্সেস করতে পারে |
রিটার্ন ভ্যালু | রিটার্ন ভ্যালু প্রদান করা যায় | রিটার্ন ভ্যালু প্রদান করা যায়, এবং রিটার্ন অপশনাল |
উদাহরণ | def add(a, b) { return a + b } | def add = { a, b -> return a + b } |
Groovy তে নামকরা ফাংশন এবং অ্যানোনিমাস ফাংশন (ক্লোজার) উভয়ই ব্যবহার করা যায়, এবং এগুলির মধ্যে পার্থক্য এবং সুবিধা অনুযায়ী আপনি কোড লিখতে পারবেন।
Closure একটি গুরুত্বপূর্ণ বৈশিষ্ট্য Groovy তে, যা ফাংশনাল প্রোগ্রামিং ধারণাকে সমর্থন করে। এটি এমন একটি ফাংশন বা কোড ব্লক যা অন্য ফাংশনের ভিতরে ডিফাইন করা থাকে এবং বাইরে থেকে কিছু ভেরিয়েবল বা স্টেট অ্যাক্সেস করতে পারে। Closures Groovy তে সাধারণত লম্বা বা পুনরাবৃত্তি কোড কম করতে এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়াতে ব্যবহৃত হয়।
একটি closure হল একটি অ্যানোনিমাস (অজ্ঞাত) ফাংশন বা ব্লক যা অন্য ফাংশনের ভিতরে বা বাইরের কোডের সঙ্গে কাজ করতে পারে এবং যে কোন ভেরিয়েবল বা মান আউটপুট দিতে পারে। Closures সাধারণত কোডের পুনঃব্যবহারযোগ্য অংশ তৈরি করার জন্য ব্যবহৃত হয় এবং এটি Java এর ল্যাম্বডা এক্সপ্রেশনের মতো কাজ করে।
Groovy তে closure এর গঠন সাধারণত নিচের মতো হয়:
def closureName = { parameters ->
// কোড ব্লক
return result
}
এখানে:
def greet = { name ->
return "Hello, $name!"
}
println greet("Groovy") // Output: Hello, Groovy!
এখানে, greet
একটি closure, যা name
প্যারামিটার নেয় এবং "Hello, Groovy!" আউটপুট দেয়।
enclosing scope
বা lexical scoping এর মাধ্যমে কাজ করে। এই বৈশিষ্ট্যটি Groovy তে closures এর শক্তিশালী ব্যবহারিক দিক।def multiplier = 2
def multiplyClosure = { number ->
return number * multiplier
}
println multiplyClosure(5) // Output: 10
এখানে, multiplyClosure
বাইরের multiplier
ভেরিয়েবলটি অ্যাক্সেস করছে এবং সেই ভেরিয়েবলের মান ব্যবহার করে আউটপুট প্রিন্ট করছে।
কোড কমপ্যাক্ট করা: Closure ব্যবহারের মাধ্যমে আপনি কোড অনেক কম করতে পারেন এবং ফাংশন বা অ্যাকশনকে পুনরায় ব্যবহারযোগ্য করে তুলতে পারেন। দীর্ঘ বা পুনরাবৃত্তি কোড ব্লকগুলো closure দিয়ে খুব সহজেই একত্রিত করা যায়।
উদাহরণ:
def add = { a, b -> a + b }
def subtract = { a, b -> a - b }
println add(5, 3) // Output: 8
println subtract(5, 3) // Output: 2
ফাংশনাল প্রোগ্রামিং সমর্থন: Closure এর মাধ্যমে Groovy ফাংশনাল প্রোগ্রামিং প্যাটার্নগুলো সমর্থন করে, যেমন উচ্চ-অর্ডার ফাংশন, ম্যাপিং, ফিল্টারিং এবং রিডিউসিং।
উদাহরণ (Using collect
with Closure):
def numbers = [1, 2, 3, 4, 5]
def squaredNumbers = numbers.collect { it * it }
println squaredNumbers // Output: [1, 4, 9, 16, 25]
Closure এবং Collections: Groovy তে closures বিশেষভাবে collections এর সাথে ভালোভাবে কাজ করে, যেমন collect
, find
, every
, each
, ইত্যাদি।
উদাহরণ (Using each
with Closure):
def numbers = [1, 2, 3, 4, 5]
numbers.each { println it }
আউটপুট:
1
2
3
4
5
Closure and Map Operations: Groovy তে closures ব্যবহার করে আপনি ম্যাপের ওপর নানা অপারেশন করতে পারেন, যেমন ম্যাপের ভ্যালু ম্যানিপুলেট করা।
উদাহরণ (Using Closure on Map):
def person = [name: "John", age: 30]
person.each { key, value -> println "$key: $value" }
আউটপুট:
name: John
age: 30
Groovy তে closures কোড লেখার জন্য একটি শক্তিশালী এবং নমনীয় উপায়। এটি ফাংশনাল প্রোগ্রামিংয়ের সুবিধা প্রদান করে, বাইরের ভেরিয়েবল অ্যাক্সেস করতে পারে, এবং কোড কমপ্যাক্ট ও পুনঃব্যবহারযোগ্য করে তোলে। Closures কোডের নমনীয়তা বৃদ্ধি করে এবং কোডের পারফরমেন্স ও রিডেবিলিটি উন্নত করতে সাহায্য করে। Groovy তে closures এর সুবিধা এবং ব্যবহার শুধুমাত্র ছোট কোড ব্লক তৈরি করার মধ্যেই সীমাবদ্ধ নয়, এটি বড় এবং জটিল অ্যাপ্লিকেশনগুলিতেও কার্যকরীভাবে ব্যবহৃত হতে পারে।
Groovy তে closures, currying, এবং composition ফাংশনাল প্রোগ্রামিংয়ের গুরুত্বপূর্ণ বৈশিষ্ট্য। এই কনসেপ্টগুলো Groovy তে খুবই শক্তিশালী এবং আপনাকে আরও নমনীয় ও পুনঃব্যবহারযোগ্য কোড লিখতে সাহায্য করে। চলুন একে একে এগুলোর বিস্তারিত আলোচনা করি।
Closures হল Groovy এর একটি ফিচার যা একটি ফাংশন বা কোড ব্লককে প্রথম-class অবজেক্ট হিসেবে扱 ব্যবহারের সুযোগ দেয়। ক্লোজার একটি ফাংশন হতে পারে যা অন্য একটি ফাংশনে পাস করা যেতে পারে, বা একটি ভেরিয়েবলে সংরক্ষিত হতে পারে। এটি Java এর লাম্বডা এক্সপ্রেশনের মতো, তবে Groovy তে আরও সহজ এবং শক্তিশালী।
// Closure ডিক্লেয়ার করা
def greet = { name -> println "Hello, $name!" }
greet("John") // Output: Hello, John!
এখানে greet
একটি ক্লোজার যা name
প্যারামিটার নেবে এবং "Hello,
Groovy তে যদি শুধুমাত্র একটিমাত্র প্যারামিটার থাকে, তাহলে আপনি it
ব্যবহার করতে পারেন।
def double = { it * 2 }
println double(5) // Output: 10
এখানে it
এর মাধ্যমে একক প্যারামিটারটি (৫) গ্রহণ করা হচ্ছে এবং তাকে ২ দিয়ে গুণ করা হচ্ছে।
Currying একটি ফাংশনাল প্রোগ্রামিং কনসেপ্ট, যেখানে একটি ফাংশনকে একাধিক আর্গুমেন্টের পরিবর্তে একেকটি আর্গুমেন্ট গ্রহণ করে একাধিক ফাংশনে ভেঙে দেওয়া হয়। Groovy তে আপনি একটি ফাংশনকে কপি বা “কারি” করে একে একে আর্গুমেন্ট পাস করতে পারেন। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং পাঠযোগ্যতা উন্নত করে।
def add = { x, y -> x + y }
def curriedAdd = add.curry(5) // 5 দিয়ে কারি করা হলো
println curriedAdd(3) // Output: 8 (৫ এবং ৩ যোগফল)
এখানে, add
ফাংশনটি দুইটি প্যারামিটার নেয়, তবে curry
মেথড ব্যবহার করে আমরা 5
প্যারামিটারটি আগেই প্রদান করেছি, এবং পরে কেবল 3
প্যারামিটার পাস করে ফলাফল পেয়েছি।
def multiply = { x, y, z -> x * y * z }
def curriedMultiply = multiply.curry(2, 3)
println curriedMultiply(4) // Output: 24 (২ * ৩ * ৪)
এখানে, প্রথমে x
এবং y
এর জন্য আর্গুমেন্ট দেওয়া হলো এবং পরে z
এর জন্য আর্গুমেন্ট দেওয়া হল। ফলস্বরূপ, আপনি এক এক করে আর্গুমেন্ট পাস করতে পারেন।
Composition হল ছোট ছোট ফাংশন বা ক্লোজারের সমষ্টি তৈরি করে একটি বড় কার্যকারিতা অর্জন করা। Groovy তে ক্লোজারের সাহায্যে ফাংশন কম্পোজিশন খুব সহজে করা যায়। এখানে আপনি একাধিক ক্লোজার বা ফাংশনকে একত্রে ব্যবহার করতে পারেন যাতে তারা একে অপরের আউটপুটকে ইনপুট হিসেবে গ্রহণ করে।
def addOne = { x -> x + 1 }
def multiplyByTwo = { x -> x * 2 }
def composedFunction = addOne >> multiplyByTwo
println composedFunction(3) // Output: 8 (৩ + ১ = ৪, ৪ * ২ = ৮)
এখানে, addOne
এবং multiplyByTwo
দুইটি ক্লোজার তৈরি করা হয়েছে, এবং >>
অপারেটর দিয়ে তাদের কম্পোজ করা হয়েছে। প্রথমে addOne
এক্সিকিউট হবে এবং তার আউটপুট multiplyByTwo
ক্লোজারের ইনপুট হিসেবে যাবে।
def square = { x -> x * x }
def subtractTwo = { x -> x - 2 }
def composedFunction = square >> subtractTwo
println composedFunction(5) // Output: 23 (৫^২ = ২৫, ২৫ - ২ = ২৩)
এখানে, প্রথমে square
ক্লোজার এক্সিকিউট হবে এবং তার আউটপুট দ্বিতীয় ক্লোজার subtractTwo
তে পাঠানো হবে। এর ফলে আমরা একটি নতুন কম্পোজড ফাংশন তৈরি করতে সক্ষম হয়েছি।
Groovy তে closures, currying, এবং composition এর মাধ্যমে আপনি ফাংশনাল প্রোগ্রামিংয়ের শক্তিশালী বৈশিষ্ট্য ব্যবহার করতে পারবেন। Closures আপনাকে ফাংশন বা কোড ব্লক তৈরি করে কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়, Currying আপনাকে আর্গুমেন্টগুলো ধাপে ধাপে পাস করতে সাহায্য করে, এবং Composition আপনাকে ছোট ছোট ফাংশনকে একত্রে কম্পোজ করে জটিল কার্যকরিতা তৈরি করতে সক্ষম করে। Groovy তে এই কনসেপ্টগুলো ব্যবহার করলে কোড আরও নমনীয়, পুনঃব্যবহারযোগ্য এবং সহজ হবে।
common.read_more